(define-library (srfi 27 test)
  (export run-tests)
  (import (chibi)
          (srfi 27)
          (chibi test))
  (begin
    (define (run-tests)
      (define (test-random rand n)
        (test-assert (<= 0 (rand n) (- n 1))))
      (test-begin "srfi-27: random")
      (let ((rs (make-random-source)))
        ;; chosen by fair dice roll.  guaranteed to be random
        (random-source-pseudo-randomize! rs 4 4)
        (let ((rand (random-source-make-integers rs)))
          (do ((k 0 (+ k 5))
               (n 1 (* n 2)))
              ((> k 1024))
            (test-random rand n))
          (let* ((state (random-source-state-ref rs))
                 (x (rand 1000000)))
            ;; the next int won't be the same, but it will be after
            ;; resetting the state
            (test-not (= x (rand 1000000)))
            (random-source-state-set! rs state)
            ;; (test x (rand 1000000))
            ))
        (test 0 (random-integer 1))
        (test-error (random-integer 0))
        (test-error (random-integer -1)))
      (test-end))))
